Análisis Factorial ------------------ .. code:: r datos <- read.csv("EAM_2019.csv", sep = ";", dec = ",", header = T) print(head(datos)) .. parsed-literal:: ï..ciiu personal_mujer personal_hombre gasto_personal gasto_financiero 1 1051 36 140 9352991 3240559 2 1030 40 176 7334998 1468298 3 3290 15 172 6668544 1547666 4 3091 88 373 22088759 35203208 5 3290 18 53 5219070 2861773 6 3290 18 53 5219070 2861773 costos_gastos_produccion gastos_adm_ventas inversion_AF ventas 1 6846304 22920307 4979745 192609248 2 5941761 12310286 5615593 115741258 3 6996020 2564695 773444 44580029 4 4175751 171278876 10501572 162509864 5 11037978 13691919 6423171 87324374 6 11037978 13691919 6423171 87324374 Pruebas para el Análisis Factorial: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ **Matriz de correlaciones:** .. code:: r library("corrplot") .. parsed-literal:: corrplot 0.92 loaded .. code:: r corr <- cor(datos[,2:9]) .. code:: r corrplot(corr, method = "circle") corrplot(corr, method = "number") .. image:: output_6_0.png :width: 420px :height: 420px .. image:: output_6_1.png :width: 420px :height: 420px **Determinante de la matriz de correlaciones:** Determinante cercano a cerco indica alta multicolinealidad. Esto significa que algunas variables son linealmente dependientes y una o más variables podrían ser expresadas como combinación lineal de otras variables y la técnica del Análisis Factorial es pertinente para analizar las variables. .. code:: r det(corr) .. raw:: html 0.00177061888189585 **Test de Bartlett o test de esfericidad:** Se evalúa si la matriz de correlaciones es la identidad :math:`I`. Significa que las intercorrelaciones entre las variables son cero y el modelo de Análisis Factorial es inadecuado. .. math:: H_0: Corr = I .. math:: H_0: Corr \neq I Se acepta la hipótesis nula si :math:`Valor-p > 0,05` .. code:: r bartlett.test(datos[,2:9]) .. parsed-literal:: Bartlett test of homogeneity of variances data: datos[, 2:9] Bartlett's K-squared = 29209, df = 7, p-value < 2.2e-16 Se rechaza la hipótesis nula porque :math:`Valor-p = 2,2e-16 < 0,05`, la matriz de correlaciones no es la Identidad. La aplicación del Análisis Factorial es adecuada. Esta afirmación también está soportada por el Determinante cercano a cero. **Kaiser-Meyer-Olkin - KMO:** Con esta prueba se busca si entre las variables hay factores comunes. Si las variables comparten factores comunes, el coeficiente de correlación parcial entre pares de variables es cercano a cero. Con los coeficientes de correlación parcial se mide el grado de relación lineal entre dos variables sin el efecto de las demás. Si se tienen coeficientes de correlación parcial altos, la aplicación del Análisis Factorial no es el adecuado. Para comprobar lo anterior se calcula una Medida de Adecuación de la Muestra de KMO, :math:`0<=KMO<=1`. .. math:: KMO <0,6 --> Inaceptable .. math:: KMO >=0,6 --> Aceptable .. math:: KMO >=0,7 --> Bien Con KMO cercano a cero indica que las correlaciones entre pares de variables no pueden ser explicadas por otras variables. .. math:: KMO = \frac{\sum_{j\neq i}\sum_{i\neq j}r^2_{ij}}{\sum_{j\neq i}\sum_{i\neq j}r^2_{ij}+\sum_{j\neq i}\sum_{i\neq j}r^2_{ij(p)}} Donde, :math:`r^2_{ij(p)}`: coeficiente de correlación parcial entre :math:`(X_i, X_i)`. Para esta prueba instalar el paquete: ``install.packages("psych")`` .. code:: r library(psych) .. code:: r KMO(datos[,2:9]) .. parsed-literal:: Kaiser-Meyer-Olkin factor adequacy Call: KMO(r = datos[, 2:9]) Overall MSA = 0.67 MSA for each item = personal_mujer personal_hombre gasto_personal 0.63 0.63 0.67 gasto_financiero costos_gastos_produccion gastos_adm_ventas 0.47 0.85 0.64 inversion_AF ventas 0.84 0.63 Como :math:`KMO = 0,67` es aceptable aplicar el Análisis Factorial porque sí hay presencia de factores comunes. Determinación de la cantidad de factores: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ **1. Determinación “a priori”.** **2. Regla de Kaiser:** Eigenvalores mayores que 1,0. **3. Criterio del porcentaje de la varianza:** varianza explicada por encima del 70%. **4. Criterio de Sedimentación:** técnica del codo. **Regla de Kaiser y criterio de sedimentación:** .. code:: r plot(eigen(corr)$values, type = "b") .. image:: output_23_0.png :width: 420px :height: 420px **Criterio del porcentaje de la varianza:** Se usará la función ``factanal()`` de la librería ``stats``. Se hará una prueba con 4 factores: ``factors = 4``. .. code:: r factanal(datos[,2:9], factors = 4) .. parsed-literal:: Call: factanal(x = datos[, 2:9], factors = 4) Uniquenesses: personal_mujer personal_hombre gasto_personal 0.611 0.209 0.005 gasto_financiero costos_gastos_produccion gastos_adm_ventas 0.908 0.166 0.005 inversion_AF ventas 0.958 0.005 Loadings: Factor1 Factor2 Factor3 Factor4 personal_mujer 0.531 0.325 personal_hombre 0.150 0.869 0.118 gasto_personal 0.326 0.880 0.278 0.192 gasto_financiero 0.272 costos_gastos_produccion 0.593 0.218 0.593 0.289 gastos_adm_ventas 0.971 0.104 0.141 0.143 inversion_AF 0.153 ventas 0.939 0.173 0.289 Factor1 Factor2 Factor3 Factor4 SS loadings 2.319 1.907 0.580 0.328 Proportion Var 0.290 0.238 0.072 0.041 Cumulative Var 0.290 0.528 0.601 0.642 Test of the hypothesis that 4 factors are sufficient. The chi square statistic is 7.29 on 2 degrees of freedom. The p-value is 0.0262 Extracción de factores: ~~~~~~~~~~~~~~~~~~~~~~~ 1. Método de Eje principal o Factor Principal. 2. Máxima Verosimilitud. En esta sesión se extraerán los factores por Máxima Verosimilitud. La función ``factanal()`` solo extraer los factores por este método. Para aplicar los otros métodos se recomienda usar la función ``fa()`` de la librería ``psych``, con el argumento ``fm = "pa"`` para el método de Eje principal o Factor Principal. Por ejemplo: ``fa(datos[,2:9], nfactors = 4, rotate = "none", fm = "pa")`` Rotación de los factores: ~~~~~~~~~~~~~~~~~~~~~~~~~ La función ``factanal()`` por defecto rota los factores por Varimax, pero se puede cambiar el método de rotación con el argumento: ``rotation =``: ``"varimax"``, ``"quartimax"``, ``"equamax"``. Estos métodos son rotaciones ortogonales. Para algunos métodos de rotación instalar la librería ``install.packages("GPArotation")`` .. code:: r library(GPArotation) .. code:: r fit <- factanal(datos[,2:9], factors = 3, rotation = "varimax") fit .. parsed-literal:: Call: factanal(x = datos[, 2:9], factors = 3, rotation = "varimax") Uniquenesses: personal_mujer personal_hombre gasto_personal 0.660 0.162 0.005 gasto_financiero costos_gastos_produccion gastos_adm_ventas 0.902 0.296 0.048 inversion_AF ventas 0.971 0.005 Loadings: Factor1 Factor2 Factor3 personal_mujer 0.527 0.247 personal_hombre 0.203 0.892 gasto_personal 0.408 0.869 0.271 gasto_financiero 0.299 costos_gastos_produccion 0.722 0.249 0.349 gastos_adm_ventas 0.971 inversion_AF 0.131 ventas 0.986 0.141 Factor1 Factor2 Factor3 SS loadings 2.666 1.923 0.362 Proportion Var 0.333 0.240 0.045 Cumulative Var 0.333 0.574 0.619 Test of the hypothesis that 3 factors are sufficient. The chi square statistic is 50.96 on 7 degrees of freedom. The p-value is 9.38e-09 ``Uniquenesses`` - :math:`\Psi`: Unicidad: proporción de la varianza no explicada. .. code:: r print(fit$uniquenesses) .. parsed-literal:: personal_mujer personal_hombre gasto_personal 0.66023136 0.16158472 0.00500000 gasto_financiero costos_gastos_produccion gastos_adm_ventas 0.90243324 0.29566162 0.04824951 inversion_AF ventas 0.97090998 0.00500000 **Comunalidad** - :math:`\Lambda`: :math:`1-\Psi`. Proporción de la varianza que sí se puede explicar por cada variable. También son suma de las cargas al cuadrado por cada variable. .. code:: r print(apply(fit$loadings^2, 1, sum)) .. parsed-literal:: personal_mujer personal_hombre gasto_personal 0.33971591 0.83841043 0.99500077 gasto_financiero costos_gastos_produccion gastos_adm_ventas 0.09756084 0.70433543 0.95175045 inversion_AF ventas 0.02914470 0.99505497 **``SS loadings:``** suma de las cargas al cuadrado por cada factor. La regla de Kaiser dice que cada factor debe tener un valor mayor a 1. **Valor p:** :math:`H_0` es que los factores seleccionados son los adecuados. Se acepta si valor p > 0,05. Se rechaza si valor p es pequeño (< 0,05). Cálculo de las puntuaciones o cargas factoriales: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Método de Regresión. 2. Método de Barlett. Se agrega el argumento: ``scores =``: ``"regression"`` o ``"Bartlett"``. Por defecto hace el cálculo con ``scores = "regression"`` .. code:: r fit <- factanal(datos[,2:9], factors = 3, rotation = "varimax", scores = "regression") fit .. parsed-literal:: Call: factanal(x = datos[, 2:9], factors = 3, scores = "regression", rotation = "varimax") Uniquenesses: personal_mujer personal_hombre gasto_personal 0.660 0.162 0.005 gasto_financiero costos_gastos_produccion gastos_adm_ventas 0.902 0.296 0.048 inversion_AF ventas 0.971 0.005 Loadings: Factor1 Factor2 Factor3 personal_mujer 0.527 0.247 personal_hombre 0.203 0.892 gasto_personal 0.408 0.869 0.271 gasto_financiero 0.299 costos_gastos_produccion 0.722 0.249 0.349 gastos_adm_ventas 0.971 inversion_AF 0.131 ventas 0.986 0.141 Factor1 Factor2 Factor3 SS loadings 2.666 1.923 0.362 Proportion Var 0.333 0.240 0.045 Cumulative Var 0.333 0.574 0.619 Test of the hypothesis that 3 factors are sufficient. The chi square statistic is 50.96 on 7 degrees of freedom. The p-value is 9.38e-09 **Realizar el Análisis Factorial con más factores y otros métodos de rotación**.